什么是云存储,从对象存储说起?
在《存储系统形态之争,从块存储到统一存储》一文中我们提到了对象存储的概念,知道目前很多企业级存储都是支持对象存储的,比如EMC、NetApp和华为等。以EMC的对象存储为例,其最早在1998年就已经具备成熟的产品了,到目前已经有二十多年的历史了。如图是关于对象存储主要产品的发展时间线。
但是对象存储真正火起来则是因为AWS(亚马逊)发布的其第一个云产品S3。S3是亚马逊的一款存储服务,也是其发布的最早的一款云服务,其全称是简单存储服务(Simple Storage Service),本质上就是对象存储。S3服务部署在亚马逊的机房,用户可以通过互联网访问S3中的资源。通过互联网访问资源的这种模式称为云(比如云计算、云存储)。
云存储(Cloud Storage)就是在线上服务端提供数据存储功能的服务,这里的线上服务端通常称为云端。云存储与传统存储的区别在于,云存储中的资源通常通过互联网可以直接访问,而传统存储通常不对外提供直接访问的接口。其实我们每个人都接触过云存储,比如iCloud、网盘和云相册等,都是云存储。而且这些云存储都是以对象存储的形式呈现的。
云存储其实除了对象存储外还有很多种形态,比如块存储和文件系统存储等也都有云的形态。只不过普通用户并不会直接使用云上的块存储和文件系统存储。云中的块存储和文件系统存储与传统存储并没有本质的差异。接下来我们看一下上述存储形态的基本概念,如下图比较形象的说明了三者的差异。
块存储:块存储提供一个线性空间,通常用户不会直接使用,需要经过操作系统的文件系统才能使用。
文件存储:文件存储提供一个目录树,文件存储有目录和文件两个基本概念,其中目录是容器,可以容纳目录和文件,因此可以形成树状结构。
对象存储:对象存储其实对文件存储的简化,将多级目录树简化成了一级,对象存储包含桶和对象两个基本概念。其中桶是容器,可以容纳对象,类似文件存储中的目录,但是差异在于桶不可以嵌套。
、
回到对象存储,我们介绍一下对象存储涉及的基本概念。由于对象存储是一个云产品,在一个存储系统中通常会有非常多的用户使用,一个用户可以创建不同的桶用于不同的用途。因此,在一个对象存储系统中各个元素之间的概念如图所示。
除了上述概念外,由于对象存储可以通过互联网访问,又涉及访问权限等内容。同时,为了保证数据的可靠性,很多对象存储系统又实现了数据备份的功能。总之,对象存储的特性还是非常多的,这部分内容我们后续会更加详细的介绍。
前文我们知道,对象存储有很多产品,包括商用产品和开源产品。对象存储的开源产品也是非常多的,比较有名的如Ceph、Minio、SeaWeedFS和Swift等。虽然都提供对象存储,功能基本类似,但架构和实现有着非常大的差异。为例让大家更加直观的认识对象存储,我们这里从使用角度介绍一下对象存储的。
我们这里就以目前比较火热的Minio为例进行介绍,我们这里部署一个单机版的Minio对象存储服务。我们可以直接从Minio官网下载二进制文件,本文在Ubuntu 20.04环境进行的测试。具体可以感觉自己的操作系统版本下载不同的二进制文件。
wget https://dl.min.io/server/minio/release/linux-amd64/minio
可以直接下载到bin目录,然后为这个二进制添加可执行的权限。另外,我们需要创建一个存储数据的目录,具体命令如下:
chmod +x minio
mkdir /data/minio/data
然后我们可以启动Minio服务了,具体命令如下所示。在启动Minio服务之前,需要设置一下用户名和密码。在启动服务时包含两个参数,分别时console的地址端口信息和数据的存储路径(需要注意的是,在生产环境数据通常是要存储在独立的硬盘上的)。
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD= minioadmin
minio server --console-address ":9090" /data/minio/data
上述命令回车后,在终端可以看到如下所示,其中包含的关键信息如API的地址和用户名密码和Console(GUI)的地址和用户名密码信息。我们可以通过上述信息访问Minio服务。
基于上述IP地址信息,我们可以通过浏览器登录Minio。如下是其登录页面,输入用户名和密码后就可以登录。可以看到Minio做的还是比较不错的,界面也还算炫酷。
登录后的界面如下所示,其中左侧是导航栏。由于整个存储系统没有任何数据,首页有个提示创建桶(Bucket)的提示。根据前面介绍,对象存储中桶是一个容器,对象是存储在某一个桶中的。因此,我们需要首先创建一个桶。
我们这里创建了一个名称为sunnytest的桶,并上传了一个名称为tmp.txt的对象。这个对象就本地的一个文本文件。经过上述操作后,可以看到此时的界面变成了下图的样子。在下图中,我们可以看到这里有一个创建对象的按钮(“Upload”)。当单击这个按钮的时候会弹出一个文件浏览的对话框,我们可以选择需要上传的文件。如果桶中有对象,对象会以列表的方式在这里展示。
如果我们选择刚才上传的对象可以看到右侧会有所变化。此时会有几个对象操作相关的按钮,比如下载对象、分享对象和删除对象等等。
从上面可以看出Minio是一个非常友好的对象存储系统,无论是从部署上来说,还是从使用上来说,都是很友好的。
有些同学可能会好奇数据是如何存储的。我们可以看一下目录结构,具体如下图所示。在该目录中Minio会创建一个隐藏的目录来存放一些元数据。而桶和对象也都会创建对应的目录来管理,具体则是放在xl.meta文件中。但xl.meta也并不是原始文件的内容,而是有一定格式的。目录中这些文件的内容细节我们后续会详细介绍,本文不再赘述。
在本文中,我们介绍了对象存储的基本概念,并对块存储、文件系统和对象存储提供的功能进行了概要的对比。最后,我们以Minio为例介绍了如何部署和使用一个对象存储系统。
文章后期可能会进行错误更正和内容更新,关注我们更方便了解内容变化。